package com.thread.thread.Semaphore;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Semaphore;

//控制线程的并发数量
public class SemaphoreTest {
	private static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

	public static void main(String[] args) throws Exception{
		//同一时刻能够运行的数量是多少,此例为每时刻能通过两个线程，不必纠结这个时刻是个什么时刻
		Semaphore semaphore = new Semaphore(2);
		Thread[] threads=new Thread[10];

		for(int i=0;i<threads.length;i++){

			threads[i]= new Thread() {
				@Override
				public void run() {
					try {
						//获取资源，因为定义的线程数为2，所以每时刻可以进入两个线程，等待两秒后才会继续进入下两个线程
						semaphore.acquire();
						System.out.println(Thread.currentThread().getName()+"----"+getFormatTimeStr());
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}finally {
						semaphore.release();
					}

				}
			};
			threads[i].setName("线程"+i);
		}

		for(int i=0;i<threads.length;i++){
			threads[i].start();
		}
	}

	public static String getFormatTimeStr() {
		return sf.format(new Date());
	}
}
